package cn.good.yan;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.scheduling.annotation.EnableAsync;

import java.util.Map;

/**
 * SpringBoot项目 - 主启动类
 *
 * @SpringBootApplication (引导类)
 *     @SpringBootConfiguration
 *        @Configuration 定义为配置类 - 等价于配置文件
 *          @Component   添加到Spring容器中，是个组件
 *     @EnableAutoConfiguration
 *        @AutoConfigurationPackage 将引导包所在子包下面的组件，添加Spring容器中
 *        @Import
 *        会给容器导入非常多的自动 配置类，并配置好。（这样省去手写配置注入Spring容器）
 *     @ComponentScan 这个注解被标识，会被Spring容器进行管理
 *  启动类 创建的位置就是需要扫描包的位置
 * @author shengren.yan
 * @create 2023-09-27
 */
//事务管理
//@EnableTransactionManagement
//@EnableScheduling //开启注解版的定时任务
@EnableAsync //开启基于注解版的异步处理
// 剔除一些功能
// @SpringBootApplication(exclude = RedisAutoConfiguration.class)
// 如果 当前包不在该目录下，可以指定该目录
// @SpringBootApplication(scanBasePackages = "com.xx 要扫描的包路径")
@SpringBootApplication
public class BootApplication {

    // 原始的
    // public static void main(String[] args) {
    //    SpringApplication.run(BootApplication.class, args);
    // }

    public static void main(String[] args) {

        // 输出当前路径
        // System.out.println(System.getProperty("user.dir"));
        ConfigurableApplicationContext run = SpringApplication.run(BootApplication.class, args);
        // 外部化配置
        ConfigurableEnvironment environment = run.getEnvironment();
        // 获取系统变量
        Map<String, Object> a = environment.getSystemEnvironment();
        // 获取系统的属性
        Map<String, Object> b = environment.getSystemProperties();
        System.out.println("开始-----");
        System.out.println(a);
        System.out.println(b);
        System.out.println("结束-----");

    }

}